git@os 添加公钥
ssh-keygen -t rsa -C "304279767@qq.com"
ssh -T git@git.oschina.net

Git：简单步骤 {
	
	Git 全局设置:
		git config --global user.name "Your Name"
		git config --global user.email "email@example.com"
	创建 git 仓库
		mkdir test
		cd test
		git init
		touch README.md
		git add README.md
		git commit -m "first commit"
		git remote add origin http://git.oschina.net/linux007/test.git
		git push -u origin master
	已有项目?
		cd existing_git_repo
		git remote add origin http://git.oschina.net/linux007/test.git
		git push -u origin master
}

Git:代码冲突常见解决方法 {
	如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,

	在发布这个配置文件的时候,会发生代码冲突:

	error: Your local changes to the following files would be overwritten by merge:
			protected/config/main.php
	Please, commit your changes or stash them before you can merge.

	如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

	git stash
	git pull
	git stash pop
	然后可以使用git diff -w +文件名 来确认代码自动合并的情况.

	反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

	//撤销commit
	git reset --hard commit_id
	git pull
	其中git reset是针对版本,如果想针对文件回退本地修改,使用
	git checkout HEAD file/to/restore

	在git的一般使用中，如果发现错误的将不想提交的文件add进入index之后，想回退取消，则可以使用命令：git reset HEAD <file>
}

创建git私有仓库 {
	以ubuntu服务器为例，如果要创建小范围的私有git服务器，是非常简单的，只需要如下几个简单步骤：

	Step 1: 安装git

	直接通过sudo apt-get install git即可完成。

	Step 2: 创建git用户

	git用户用来通过SSH连接git服务，输入命令：

	$ sudo adduser git
	Step 3: 创建证书登录

	首先收集所有需要登录的用户公钥，然后导入到/home/git/.ssh/authorized_keys文件即可。

	Step 4: 初始化git仓库

	假设仓库位于/srv/sample.git，在/srv目录下输入命令：

	$ sudo git init --bare sample.git
	这样就创建了一个裸仓库，裸仓库没有working dir，因为服务器上的git仓库纯粹是为了共享，仓库目录一般以.git结尾。然后把owner改为git：

	$ sudo chown -R git:git sample.git
	Step 5: 防止登录shell

	出于安全考虑，git用户不应该登录shell，可以编辑/etc/passwd，找到类似一行：

	git:x:1001:1001:,,,:/home/git:/bin/bash
	改为：

	git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
	这样，git用户可以正常通过ssh使用git，但无法登录shell。

	Step 6: 克隆仓库

	在客户端就可以通过ssh克隆仓库了：

	$ git clone git@server:/srv/sample.git
	Cloning into 'sample'...
	warning: You appear to have cloned an empty repository.
	然后，就可以正常推送了：

	$ touch README
	$ git add README
	$ git commit -m "add readme"
	$ git push origin master
	Counting objects: 3, done.
	Writing objects: 100% (3/3), 212 bytes, done.
	Total 3 (delta 0), reused 0 (delta 0)
	To git@ubuntu:/srv/sample.git
	 * [new branch]      master -> master
 
 }
 
 如何删除git中的文件 {
	比如，项目的控制文件，一般是不上传的，现在我使用phpstorm，它的.idea目录，有时候会错误的上传到远程库中。

	删除的步骤如下。

	将本地.idea目录改名，这个步骤适合于不是你push该目录，是别人上传的：

	mv .idea/ .idea_back
	如果是自己push的，可略过上面步骤。

	删除.idea目录下文件：

	git rm .idea/* -r然后commit：
	git commit -a -m ‘remove .idea’   注意是单引号再次push就可以了：
	git push -u origin master亡羊补牢，可以增加忽略文件:
	vim .gitignore在文件中加入：
	.idea/**/*
 }

回退到某个历史版本
问题描述：项目发展的很顺利，一个版本接一个版本的叠上去了．现在是S128版本了．突然测试人员不知咋的，说在S105版本上发现了一个严重的问题．过了这么久了才报这个bug，但是在S128版本又复现不了．怎么办呢？没有办法只能退到S105那个版本去重新复现一下．
操作：找到你的S105版本target_bin.7z 解压开来，查看里面的manifest.xml.可以看到你要的版本号．版本号是16进制的．如revision="668f074c6240661fc642ccee3ea6d80d6070de50"．
好了，有了版本号，我们在git库上就可以切换到这个库上了．
操作：
1.git branch (自定义分支名称)　(版本号)　例如：git branch s105 668f074c62406
2.git checkout (分支)　例如：git branch s105
OK，你就回到了S105的版本去了．


1.进入到文件所在文件目录，或者能找到文件的路径
查看文件的修改记录
$ git log MainActivity.java

2.回退到指定的版本
$ git reset a4e215234aa4927c85693dca7b68e9976948a35e MainActivity.java

3.提交到本地参考
$ git commit -m "revert old file because yjl commmit have a bug"

4.更新到工作目录
$ git checkout MainActivity.java

5.提交到远程仓库
$ git push origin master

//===================
1. git https方式保存密码
git config credential.helper store
为当前仓库设置记住密码，设置后，只要在推送一次，以后就不需要用户名和密码了

2. ssh 和 https 相互切换
先删除，在添加
（1）git remote remove origin
 (2) git remote add origin "https://git.oschina.net/linux007/document.git"
 (3) git push origin master

3. git 导出代码
 git archive --format zip --output "./output.zip" master -0
4. windows7 sourceTree log乱码的问题
全局gitconfig 配置

[user]
	name = test
	email = test@gmail.com
[i18n]
	commitencoding = utf-8
	logoutputencoding = utf-8
[core]
	quotepath = false
	editor = vim
[gui]
	encoding = utf-8
[push]
	default = simple
